// 条款35：考虑virtual函数以外的其他选择
// 虚函数是C++实现多态的标准机制，但并非所有情况下都是最佳选择。
// 条款35探讨了几种替代虚函数的方法，每种方法各有优缺点和适用场景。

// 为什么需要替代方案？
// 虚函数有一些固有的限制和缺点：
//      运行时开销（虚表查找）
//      编译期绑定受限
//      基类必须知道可能需要定制的行为
//      无法在运行时轻易改变单个对象的行为
//      派生类必须继承自基类（紧耦合）

// 替代方案1：非虚接口模式（NVI模式）
// 基本思想：使用公有非虚函数包装私有/受保护的虚函数
class GameCharacter
{
public:
    // 非虚接口
    int healthValue() const
    {
        // 前置操作
        int retVal = doHealthValue(); // 调用虚函数
        // 后置操作
        return retVal;
    }

protected:
    // 真正的虚函数
    virtual int doHealthValue() const
    {
        // 默认实现
        return 100;
    }
};